package br.com.divulgaqui.managedbean;

import java.io.IOException;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import br.com.divulgaqui.client.ContaServiceBeanLocal;
import br.com.divulgaqui.client.exception.LoginException;
import br.com.divulgaqui.client.exception.LoginInativoException;
import br.com.divulgaqui.entity.Perfil;
import br.com.divulgaqui.entity.Pessoa;

import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.ocpsoft.pretty.faces.annotation.URLMappings;

@ManagedBean
@SessionScoped
@URLMappings(mappings={
		  @URLMapping(id = "areaCliente", pattern = "/cliente/area", viewId = "/principal/cliente/areaCliente.jsf"),
		  @URLMapping(id = "login", pattern = "/login", viewId = "/login.jsf"),
		  @URLMapping(id = "adminIndex", pattern = "/admin/adminIndex", viewId = "/admin/principal/adminIndex.jsf")
		})
public class LoginManagedBean extends BaseBean{

	private static final long serialVersionUID = 1L;
	private Pessoa pessoa;
	private String senha = "";
	private String email = "";
	@EJB
	private ContaServiceBeanLocal contaServiceBeanLocal;
	
	public LoginManagedBean(){
	}
	
	public void login() throws IOException{
		try {
			pessoa = contaServiceBeanLocal.login(senha, email);
			FacesContext context = FacesContext.getCurrentInstance();
			Object requestObject = context.getExternalContext().getRequest();
			((HttpServletRequest)requestObject).getSession().setAttribute("pessoa", pessoa);
			String pagina = "/";
			if(pessoa.getPerfil().getNome().equals(Perfil.PERFIL_CLIENTE)){
				pagina = "/divulgaqui/cliente/area";
			}else if(pessoa.getPerfil().getNome().equals(Perfil.PERFIL_ADMINISTRADOR)){
				pagina = "/divulgaqui/admin/adminIndex";
			}
			context.getExternalContext().redirect(pagina);
		} catch (LoginException e) {
			addMensagem(FacesMessage.SEVERITY_ERROR, "Login", "Login ou senha inválidos");
		} catch (LoginInativoException e) {
			addMensagem(FacesMessage.SEVERITY_ERROR, "Login", "Login Inativo");
		}
	}
	public void logout(){
		//Object requestObject = FacesContext.getCurrentInstance().getExternalContext().getContext();
		FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("/divulgaqui/login");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//((HttpServletRequest)requestObject).getSession().removeAttribute("pessoa");
		pessoa = null;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}	
}
